package generic;

import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class GenericArray2<T>{

    private Object[] array;

    public GenericArray2(int capacity) {
        array = new Object[capacity];
    }

    public void put(int index, T element) {
        array[index] = element;
    }
    public T get(int index) {
        return (T) array[index];
    }

    //不能通过方法直接获取返回数组，由于泛型的擦除，不能Object[]数组转型为具体类型的数组
    public T[] getArray() {
        return (T[] ) array ;
    }

    public static void main(String[] args) {

//        GenericArray2<String> genericArray =new GenericArray2(3);
//        genericArray.put(0,"spring");
//        genericArray.put(1,"springAI");
//        String value = genericArray.get(0);
//        System.out.println(value);
//
//        //验证通过反射获取字节码文件class对象
//        String[] array = genericArray.getArray();
//        Class<? extends GenericArray2> aClass = genericArray.getClass();
//        Field[] declaredField  = aClass.getDeclaredFields();
//        for (Field field : declaredField) {
//            System.out.println(field.getName()+",类型="+field.getType()+ aClass.getSimpleName());
//        }

        List<String> list = new ArrayList<>();
        list.add("spring");
        list.add("springAI");
        list.add("springBoot");
        String [] arr =new String[list.size()];
        list.toArray(arr);
        System.out.println(Arrays.toString( arr));
    }
}
